#include <cstdlib>
#include <iostream>
#include <ctime>
#include "../header/Joueur.h"

void Joueur::afficheMain() {

	cout << this->nom << " possede dans sa main : " << endl;
	int nbG = 0, nbC = 0, nbE = 0, nbL = 0, nbZ = 0;
	for (int i = 0; i < this->nbPion; i++) {
		if (this->main[i]->getName().compare("Gazelle") == 0) {
			nbG++;
		} else if (this->main[i]->getName().compare("Croco") == 0) {
			nbC++;
		} else if (this->main[i]->getName().compare("Elephant") == 0) {
			nbE++;
		} else if (this->main[i]->getName().compare("Lion") == 0) {
			nbL++;
		} else if (this->main[i]->getName().compare("Zebre") == 0) {
			nbZ++;
		}
	}
	if (nbG != 0) {
		cout << "  - " << nbG << " Gazelle(s). " << endl;
	}
	if (nbC != 0) {
		cout << "  - " << nbC << " Croco(s) " << endl;
	}
	if (nbE != 0) {
		cout << "  - " << nbE << " Elephant(s) " << endl;
	}
	if (nbL != 0) {
		cout << "  - " << nbL << " Lion(s) " << endl;
	}
	if (nbZ != 0) {
		cout << "  - " << nbZ << " Zebre(s) " << endl;
	}

}

void Joueur::supprimerPionMain(string nomPion) {

	int i = 0;

	while (this->main[i]->getName().compare(nomPion) != 0) {
		i++;
	}
	while (i < this->nbPion) {
		if (i + 1 < this->nbPion) {
			this->main[i] = this->main[i + 1];
		} else {
			this->main[i] = NULL;
		}
		i++;
	}
	this->nbPion--;

}

void Joueur::ajouterPionMain(Pion* nomPion) {

	this->main[this->nbPion] = nomPion;
	this->nbPion++;

}

void Joueur::retireGazelleJoueur() {

	int i, j;
	Pion *gazelle;
	for (i = 1; i < 6; i++) {
		for (j = 1; j < 7; j++) {
			if (map->getPlateau(i, j) != NULL) {
				if (map->getPlateau(i, j)->getP() != NULL) {
					if (map->getPlateau(i, j)->getP()->getName().compare("Lion")
							== 0) { // si on est dans une case contenant un lion

						//on verifie le case en haute
						if ((i - 1) > 0) {


							if (map->getPlateau(i - 1, j)->getP() != NULL) {

								if (map->getPlateau(i - 1, j)->getP()->getName().compare(
										"Gazelle") == 0) {
									cout << "gazelle trouve en haut" << endl;

									if (map->getPlateau(i - 1, j)->getP()->isFace()
											== false) { // on check si la gazelle n'est pas cache, car on ne retire pas les gazelle cache

										cout << " le num de la gazelle "
												<< map->getPlateau(i - 1, j)->getP()->getCouleur()
												<< endl;
										cout << "le num du joueur : " << numero
												<< endl;

										if (map->getPlateau(i - 1, j)->getP()->getCouleur()
												== numero) { // on verifie si la gazelle appartient au joueur en question
											gazelle = new Gazelle(this->numero);

											this->ajouterPionMain(gazelle); // la gazelle revient a la main du joueur
											this->map->suppPion(i - 1, j); //on supprime la gazelle de la map
											cout << "on retire les gazelles"
													<< endl;
										}
									}
								}

							}
						}

						//on verifie la case en bas
						if (((i + 1) > 0) && ((i + 1) < 7)) {

							if (map->getPlateau(i + 1, j)->getP() != NULL) {

								if (map->getPlateau(i + 1, j)->getP()->getName().compare(
										"Gazelle") == 0) {

									cout << "gazelle trouve en bas" << endl;
									if (map->getPlateau(i + 1, j)->getP()->isFace()
											== false) { // on check si la gazelle n'est pas cache



										if (map->getPlateau(i + 1, j)->getP()->getCouleur()
												== numero) { // on verifie si la gazelle appartient au joueur en question
											gazelle = new Gazelle(this->numero);
											this->ajouterPionMain(gazelle); // la gazelle revient a la main du joueur
											this->map->suppPion(i + 1, j); //on supprime la gazelle de la map
											cout << "on retire les gazelles"
													<< endl;
										}
									}
								}
							}
						}

						//on verifie la case a gauche
						if ((j - 1) > 0) {

							if (map->getPlateau(i, j - 1)->getP() != NULL) {

								if (map->getPlateau(i, j - 1)->getP()->getName().compare(
										"Gazelle") == 0) {
									cout << "gazelle trouve a gauche" << endl;
									if (map->getPlateau(i, j - 1)->getP()->isFace()
											== false) { // on check si la gazelle n'est pas cache


										if (map->getPlateau(i, j - 1)->getP()->getCouleur()
												== numero) { // on verifie si la gazelle appartient au joueur en question
											gazelle = new Gazelle(this->numero);
											this->ajouterPionMain(gazelle); // la gazelle revient a la main du joueur
											this->map->suppPion(i, j - 1); //on supprime la gazelle de la map
											cout << "on retire les gazelles"
													<< endl;
										}
									}

								}

							}
						}
						//on verifie la case a droite
						if (((j + 1) > 0) && ((j + 1) < 6)) {

							if (map->getPlateau(i, j + 1)->getP() != NULL) {

								if (map->getPlateau(i, j + 1)->getP()->getName().compare(
										"Gazelle") == 0) {
									cout << "gazelle trouve en haut" << endl;
									if (map->getPlateau(i, j + 1)->getP()->isFace()
											== false) { // on check si la gazelle n'est pas cache

										if (map->getPlateau(i, j + 1)->getP()->getCouleur()
												== numero) { // on verifie si la gazelle appartient au joueur en question
											gazelle = new Gazelle(this->numero);
											this->ajouterPionMain(gazelle); // la gazelle revient a la main du joueur
											this->map->suppPion(i, j + 1); //on supprime la gazelle de la map
											cout << "on retire les gazelles"
													<< endl;
										}
									}

								}

							}
						}

					}

				}

			}
		}
	}
}

int Joueur::random(int binf, int bsup) {
	int random_variable = std::rand();
	return random_variable % (bsup - binf) + binf;
}
